package parsing

import (
	"data-process/function"
	"strconv"
	"strings"
)

// StringParse 字符串解析
// name|1-4: "*"  => "***"
// name|3: "*"  => "***" | "**" | "*"
// name|@name: "string" => "张三"
type StringParse struct {
	field    string            // 属性
	key      string            // key
	value    string            // 默认的value值
	size     int               // 需要生成的数据量
	function function.FuncBase // 函数
}

func NewStringParse(key, value string, size int) *StringParse {
	if size == 0 {
		size = 10
	}
	return &StringParse{
		key:   key,
		value: value,
		size:  size,
	}
}

func (s *StringParse) parse() {
	keys := strings.Split(s.key, "|")
	s.field = keys[0]
	if keys[1][0] == '@' {
		// 使用函数
		s.function = function.SelectFunction(keys[1][1:], s.size)
	} else if strings.Contains(keys[1], "-") {
		// 使用范围随机
		items := strings.Split(keys[1], "-")
		min, _ := strconv.Atoi(items[0])
		max, _ := strconv.Atoi(items[1])
		s.function = function.RandomString(min, max, s.size, s.value)
	} else {
		// 使用默认值
		repeat, _ := strconv.Atoi(keys[1])
		s.function = function.RepeatString(repeat, s.size, s.value)
	}
}

func (s *StringParse) Build() (string, []interface{}, error) {
	s.parse()
	if s.function != nil {
		return s.field, s.function.Build(), nil
	}
	return "", nil, nil
}
